#!/bin/bash

readFile ()
{
  FILE=$1
  if [ -f $FILE ]; then
    cat $FILE
  else
    printf "-"
  fi
}

walktree ()
{
  NUMLINES=200
  TIPADDR=$1
  TCOMM=$2
  NAME=$3
  OID=$4
  VERSION=$5
  COUNT=0
  echo "<HR>SNMP info for <B>$NAME</B> oid: .$OID."
  if [ "$VERSION" = "2" ]; then
    VERSTR="-v 2c"
    echo "(snmp version 2c)"
  else
    VERSTR="-v 1"
  fi
  echo "<TABLE><TR><TD><PRE>"
  $SIM_SNMPWALK -Ovq $VERSTR $TIPADDR -c $TCOMM .$OID 2>&1| while read SNMPLINE
  do
    if [ $COUNT -lt $NUMLINES ]; then
      echo "    $SNMPLINE"
      COUNT=`expr $COUNT + 1`
    else
      break
    fi
  done
  echo "</PRE></TD></TR></TABLE>"
}

hex2intIp ()
{
  HEXADDR="`echo $1 | sed 's/\"//g'`"
  IPADDR=""
  for PART in $HEXADDR
  do
    I1=`echo 16 i 16 o ${PART:0:1} p | dc`
    I2=`echo 16 i 16 o ${PART:1} p | dc`
    NUM=`expr $I1 \* 16 + $I2`
    if [ "$IPADDR" = "" ]; then
      IPADDR="$NUM"
    else
      IPADDR="$IPADDR.$NUM"
    fi
  done
  printf $IPADDR
}

getSnmpInfo ()
{
  IPADDR=$1 
  TYPEINFO=$2
  SNMPFILE=$SIM_IPDATAB/`echo $IPADDR | sed 's#\.#/#g'`/snmpcomm.txt
  if [ -f "$SNMPFILE" ]; then
    COMMUNITY=`cat $SNMPFILE`
  else
    COMMUNITY=public
  fi
  if [ "$IPADDR" = "" ]; then
    echo "Oops, ipaddr missing............"
  fi
  echo "
	</TD></TR></TABLE>
	<CENTER>
        "
  echo "<H2>Info for $IPADDR (`$SIM_HOST $IPADDR | awk '{ print $5 }'`)</H2>"
  case $TYPEINFO in
    (system)
       SYSDESCR=`$SIM_SNMPGET -v1 -Onv -c $COMMUNITY $IPADDR .1.3.6.1.2.1.1.1.0`
       SYSOID=`$SIM_SNMPGET -v1 -Onv -c $COMMUNITY $IPADDR .1.3.6.1.2.1.1.2.0 | awk '{ print $2 }'`
       SYSUPTIME=`$SIM_SNMPGET -v1 -Onv -c $COMMUNITY $IPADDR .1.3.6.1.2.1.1.3.0`
       SYSCONTACT=`$SIM_SNMPGET -v1 -Ovq -c $COMMUNITY $IPADDR .1.3.6.1.2.1.1.4.0`
       SYSNAME=`$SIM_SNMPGET -v1 -Ovq -c $COMMUNITY $IPADDR .1.3.6.1.2.1.1.5.0`
       SYSLOCATION=`$SIM_SNMPGET -v1 -Ovq -c $COMMUNITY $IPADDR .1.3.6.1.2.1.1.6.0`
       echo "<TABLE VALIGN=top>
             <TR><TD>System name:</TD><TD>$SYSNAME</TD></TR>
             <TR><TD>System descr:</TD><TD><PRE>${SYSDESCR}</PRE></TD></TR>
             <TR><TD>Object id:</TD><TD>$SYSOID</TD></TR>
             <TR><TD>Uptime:</TD><TD>${SYSUPTIME:10}</TD></TR>
             <TR><TD>Contact:</TD><TD>$SYSCONTACT</TD></TR>
             <TR><TD>Location:</TD><TD>$SYSLOCATION</TD></TR>
             </TABLE>"
    ;;
    (jetdirect)
      walktree $IPADDR $COMMUNITY HP-Jetd-ConfigInfo 1.3.6.1.4.1.11.2.4.3.1.12.1.2
      walktree $IPADDR $COMMUNITY HP-Jetd-PrintJobs 1.3.6.1.4.1.11.2.3.9.4.2.1.1.6.5.23
    ;;
    (cisco)
      echo "<H3>Cisco works info.</H3>
            <TABLE>
            `$SIM_SNMPWALK -Onvq -v1 -c $COMMUNITY $IPADDR .1.3.6.1.4.1.9.9.25.1.1.1.2 | sed 's/\"//g' \
                   | awk -F$ '{ print "<TR><TD>" $1 "</TD><TD>" $2 "</TD></TR>"}'`
            </TABLE>"

      echo "<H3>CDP table</H3>
            <TABLE VALIGN=top ALIGN=center>
            <TR>
            <TD></TD>
            <TD>Addr<BR>type</TD>
            <TD>IPaddres</TD>
            <TD>Name</TD>
            <TD>Interface</TD>
            <TD>Hardware</TD>
            <TD>Capabilities</TD>
            <TD>Native<BR>vlan</TD>
            <TD>Duplex</TD>
            </TD>"
      $SIM_SNMPWALK -On -v1 -c $COMMUNITY $IPADDR .1.3.6.1.4.1.9.9.23.1.2.1.1.3 | while read OID D1 D2 VAL
      do
        REC=${OID:30}
        HEXIP="`$SIM_SNMPGET -Onvq -v1 -c $COMMUNITY $IPADDR .1.3.6.1.4.1.9.9.23.1.2.1.1.4.$REC`"
        NIPADDR=`hex2intIp "$HEXIP"`
        NETDIR=$SIM_IPDATAB/`echo $NIPADDR| sed 's#\.#/#g'`
        NSTATUS=`readFile $NETDIR/pollstatus.txt`
        case ${NSTATUS:20} in
          (${NMAPNAME[1]})  STATUSBGCOLOR=${NMAPCOLOR[1]} ; TYPE=E ;;
          (${NMAPNAME[2]})  STATUSBGCOLOR=${NMAPCOLOR[2]} ; TYPE=E ;;
          (${NMAPNAME[3]})  STATUSBGCOLOR=${NMAPCOLOR[3]} ; TYPE=E ;;
          (${NMAPNAME[4]})  STATUSBGCOLOR=${NMAPCOLOR[4]} ; TYPE=E ;;
          (${NMAPNAME[5]})  STATUSBGCOLOR=${NMAPCOLOR[5]} ; TYPE=E ;;
          (${NMAPNAME[6]})  STATUSBGCOLOR=${NMAPCOLOR[6]} ; TYPE=E ;;
#         (${NMAPNAME[7]})  STATUSBGCOLOR=${NMAPCOLOR[7]} ; TYPE=E ;;
          (*)               STATUSBGCOLOR=${NMAPCOLOR[0]} ; TYPE=U ;;
        esac

        echo "<TR>
              <TD>$TYPE</TD>
              <TD>`$SIM_SNMPGET -Onvq -v1 -c $COMMUNITY $IPADDR .1.3.6.1.4.1.9.9.23.1.2.1.1.3.$REC`</TD>
              <TD BGCOLOR=$STATUSBGCOLOR><A HREF=$SCRIPT_NAME?mon+nodestatus+$NIPADDR+$NETWORK>$NIPADDR</A></TD>
              <TD>`$SIM_SNMPGET -Onvq -v1 -c $COMMUNITY $IPADDR .1.3.6.1.4.1.9.9.23.1.2.1.1.6.$REC`</TD>
              <TD>`$SIM_SNMPGET -Onvq -v1 -c $COMMUNITY $IPADDR .1.3.6.1.4.1.9.9.23.1.2.1.1.7.$REC`</TD>
              <TD>`$SIM_SNMPGET -Onvq -v1 -c $COMMUNITY $IPADDR .1.3.6.1.4.1.9.9.23.1.2.1.1.8.$REC`</TD>
              <TD>`$SIM_SNMPGET -Onvq -v1 -c $COMMUNITY $IPADDR .1.3.6.1.4.1.9.9.23.1.2.1.1.9.$REC`</TD>
              <TD>`$SIM_SNMPGET -Onvq -v1 -c $COMMUNITY $IPADDR .1.3.6.1.4.1.9.9.23.1.2.1.1.11.$REC`</TD>
              <TD>`$SIM_SNMPGET -Onvq -v1 -c $COMMUNITY $IPADDR .1.3.6.1.4.1.9.9.23.1.2.1.1.12.$REC`</TD>
              </TR>"
      done
      echo "</TABLE>"
    ;;
    (windows-info)
      WINTYPE=`$SIM_SNMPGET -v1 -Onv -c $COMMUNITY $IPADDR .1.3.6.1.4.1.232.11.2.2.1.0`
      WINVERSION=`$SIM_SNMPGET -v1 -Onv -c $COMMUNITY $IPADDR .1.3.6.1.4.1.232.11.2.2.2.0`
      WINBUILD=`$SIM_SNMPGET -v1 -Onv -c $COMMUNITY $IPADDR .1.3.6.1.4.1.232.11.2.2.3.0`
      echo "<TABLE VALIGN=top>
             <TR><TD>Windows type:</TD><TD>${WINTYPE:7}</TD></TR>
             <TR><TD>Windows version:</TD><TD>${WINVERSION:7}</TD></TR>
             <TR><TD>Windows build:</TD><TD>${WINBUILD:7}</TD></TR>
             </TABLE>"
    ;;
    (ip-interfaces)
      echo "<TABLE><TR BGCOLOR=DDDDDD>
            <TD>no</TD>
            <TD>name</TD>
            <TD>ip addr</TD>
            <TD>mask</TD>
            <TD>type</TD>
            <TD>mac</TD>
            <TD>admin</TD>
            <TD>oper</TD>
            </TR>"
      $SIM_SNMPWALK -Ovq -v1 -c $COMMUNITY $IPADDR .1.3.6.1.2.1.4.20.1.1 | while read INTIP
      do
        INTNO=`$SIM_SNMPGET -Ovq -v1 -c $COMMUNITY $IPADDR .1.3.6.1.2.1.4.20.1.2.$INTIP`
        NETDIR=$SIM_IPDATAB/`echo $INTIP| sed 's#\.#/#g'`
        NSTATUS=`readFile $NETDIR/pollstatus.txt`
        case ${NSTATUS:20} in
          (${NMAPNAME[1]})  STATUSBGCOLOR=${NMAPCOLOR[1]} ; TYPE=E ;;
          (${NMAPNAME[2]})  STATUSBGCOLOR=${NMAPCOLOR[2]} ; TYPE=E ;;
          (${NMAPNAME[3]})  STATUSBGCOLOR=${NMAPCOLOR[3]} ; TYPE=E ;;
          (${NMAPNAME[4]})  STATUSBGCOLOR=${NMAPCOLOR[4]} ; TYPE=E ;;
          (${NMAPNAME[5]})  STATUSBGCOLOR=${NMAPCOLOR[5]} ; TYPE=E ;;
          (${NMAPNAME[6]})  STATUSBGCOLOR=${NMAPCOLOR[6]} ; TYPE=E ;;
#         (${NMAPNAME[7]})  STATUSBGCOLOR=${NMAPCOLOR[7]} ; TYPE=E ;;
          (*)               STATUSBGCOLOR=${NMAPCOLOR[0]} ; TYPE=U ;;
        esac

        echo "<TR>
              <TD>$INTNO</TD>
              <TD>`$SIM_SNMPGET -Ovq -v1 -c $COMMUNITY $IPADDR .1.3.6.1.2.1.2.2.1.2.$INTNO`</TD>
              <TD BGCOLOR=$STATUSBGCOLOR>$INTIP</TD>
              <TD>`$SIM_SNMPGET -Ovq -v1 -c $COMMUNITY $IPADDR .1.3.6.1.2.1.4.20.1.3.$INTIP`</TD>
              <TD>`$SIM_SNMPGET -Ovq -v1 -c $COMMUNITY $IPADDR .1.3.6.1.2.1.2.2.1.3.$INTNO`</TD>
              <TD>`$SIM_SNMPGET -Ovq -v1 -c $COMMUNITY $IPADDR .1.3.6.1.2.1.2.2.1.6.$INTNO`</TD>
              <TD>`$SIM_SNMPGET -Ovq -v1 -c $COMMUNITY $IPADDR .1.3.6.1.2.1.2.2.1.7.$INTNO`</TD>
              <TD>`$SIM_SNMPGET -Ovq -v1 -c $COMMUNITY $IPADDR .1.3.6.1.2.1.2.2.1.8.$INTNO`</TD>
             </TR>"
      done
      echo "</TABLE>"
    ;; 
    (ip-routes)
     
      echo "<TABLE><TR BGCOLOR=DDDDDD>
            <TD>no</TD>
            <TD>network</TD>
            <TD>mask</TD>
            <TD>gateway</TD>
            <TD>int</TD>
            <TD>protocol</TD>
            <TD>type</TD>
            <TD>cost</TD>
            </TR>"
      LINENUM=1
      $SIM_SNMPWALK -Ovq -v1 -c $COMMUNITY $IPADDR .1.3.6.1.2.1.4.21.1.1 | while read NETWORK
      do
        echo "<TR>
              <TD ALIGN=right>$LINENUM</TD>
              <TD>$NETWORK</TD>
              <TD>`$SIM_SNMPWALK -Ovq -v1 -c $COMMUNITY $IPADDR .1.3.6.1.2.1.4.21.1.11.$NETWORK`</TD>
              <TD>`$SIM_SNMPWALK -Ovq -v1 -c $COMMUNITY $IPADDR .1.3.6.1.2.1.4.21.1.7.$NETWORK`</TD>
              <TD>`$SIM_SNMPWALK -Ovq -v1 -c $COMMUNITY $IPADDR .1.3.6.1.2.1.4.21.1.2.$NETWORK`</TD>
              <TD>`$SIM_SNMPWALK -Ovq -v1 -c $COMMUNITY $IPADDR .1.3.6.1.2.1.4.21.1.9.$NETWORK`</TD>
              <TD>`$SIM_SNMPWALK -Ovq -v1 -c $COMMUNITY $IPADDR .1.3.6.1.2.1.4.21.1.8.$NETWORK`</TD>
              <TD>`$SIM_SNMPWALK -Ovq -v1 -c $COMMUNITY $IPADDR .1.3.6.1.2.1.4.21.1.3.$NETWORK`</TD>
             </TR>"
        LINENUM=`expr $LINENUM + 1` 
      done
      echo "</TABLE>"
    ;;

    (interfaces)
      echo "<TABLE><TR BGCOLOR=DDDDDD>
            <TD>no</TD>
            <TD>name</TD>
            <TD>type</TD>
            <TD>mac</TD>
            <TD>admin</TD>
            <TD>oper</TD>
            </TR>"
      $SIM_SNMPWALK -Ovq -v1 -c $COMMUNITY $IPADDR .1.3.6.1.2.1.2.2.1.1 | while read INTNO
      do
        echo "<TR>
              <TD>$INTNO</TD>
              <TD>`$SIM_SNMPGET -Ovq -v1 -c $COMMUNITY $IPADDR .1.3.6.1.2.1.2.2.1.2.$INTNO`</TD>
              <TD>`$SIM_SNMPGET -Ovq -v1 -c $COMMUNITY $IPADDR .1.3.6.1.2.1.2.2.1.3.$INTNO`</TD>
              <TD>`$SIM_SNMPGET -Ovq -v1 -c $COMMUNITY $IPADDR .1.3.6.1.2.1.2.2.1.6.$INTNO`</TD>
              <TD>`$SIM_SNMPGET -Ovq -v1 -c $COMMUNITY $IPADDR .1.3.6.1.2.1.2.2.1.7.$INTNO`</TD>
              <TD>`$SIM_SNMPGET -Ovq -v1 -c $COMMUNITY $IPADDR .1.3.6.1.2.1.2.2.1.8.$INTNO`</TD>
             </TR>"
      done
      echo "</TABLE>"
    ;;
    (novell)
       echo "<H2>Novell info.</H2>
            <TABLE><TR BGCOLOR=DDDDDD>
            <TD>Type</TD>
            <TD>Value</TD>
            </TR>
            <TR><TD>Users / MaxLogins</TD><TD>
                  `$SIM_SNMPGET -v1 -Ovq -c $COMMUNITY $IPADDR .1.3.6.1.4.1.23.2.28.3.2.0` / 
                  `$SIM_SNMPGET -v1 -Ovq -c $COMMUNITY $IPADDR .1.3.6.1.4.1.23.2.28.3.3.0`
            </TD></TR>
            <TR><TD>Connections / Max</TD><TD>
                   `$SIM_SNMPGET -v1 -Ovq -c $COMMUNITY $IPADDR .1.3.6.1.4.1.23.2.28.3.4.0` / 
                   `$SIM_SNMPGET -v1 -Ovq -c $COMMUNITY $IPADDR .1.3.6.1.4.1.23.2.28.3.6.0`</TD></TR>
            <TR><TD>CPU load</TD><TD>
                 `$SIM_SNMPGET -v1 -Ovq -c $COMMUNITY $IPADDR .1.3.6.1.2.1.25.3.3.1.2.1` /
                 `$SIM_SNMPGET -v1 -Ovq -c $COMMUNITY $IPADDR .1.3.6.1.2.1.25.3.3.1.2.2`
            </TD></TR>
            <TR><TD>Cache Buffers</TD><TD>
                 `$SIM_SNMPGET -v1 -Ovq -c $COMMUNITY $IPADDR .1.3.6.1.2.1.25.2.3.1.6.3` (* 4096)
            </TD></TR>

            </TABLE>"
       echo "<TABLE><TR BGCOLOR=DDDDDD ALIGN=center>
             <TD>VolNo</TD>
             <TD>Volume name</TD>
             <TD>Volume size</TD>
             <TD>Available</TD>
             <TD>Purgable</TD>
             </TR>"
       $SIM_SNMPWALK -v1 -Ovq -c $COMMUNITY $IPADDR .1.3.6.1.4.1.23.2.28.2.14.1.1 | while read INTNUM REST
       do
         echo "<TR ALIGN=right>
               <TD>$INTNUM</TD>
               <TD ALIGN=left>`$SIM_SNMPGET -v1 -Ovq -c $COMMUNITY $IPADDR .1.3.6.1.4.1.23.2.28.2.14.1.2.$INTNUM`</TD>
               <TD>`$SIM_SNMPGET -v1 -Ovq -c $COMMUNITY $IPADDR .1.3.6.1.4.1.23.2.28.2.14.1.3.$INTNUM`</TD>
               <TD>`$SIM_SNMPGET -v1 -Ovq -c $COMMUNITY $IPADDR .1.3.6.1.4.1.23.2.28.2.14.1.4.$INTNUM`</TD>
               <TD>`$SIM_SNMPGET -v1 -Ovq -c $COMMUNITY $IPADDR .1.3.6.1.4.1.23.2.28.2.14.1.5.$INTNUM`</TD>
               </TR>"
       done
       echo "</TABLE>"
              
            

    ;;

  esac
}

# ------------------------- Main -----------------------------
IPADDR=$2
if [ "$IPADDR" != "" ]; then
# echo "Getting snmp info for $2 ($1)"
  NETWORK=$3
  getSnmpInfo $IPADDR $1
fi
